Je profite de ce dimanche pour partager une petite macro Excel que j’utilise depuis quelques temps compte tenu de l’usage d’un format de nomenclature assez constant chez nos clients. Cette macro me permet de recréer des liens de nomenclature à partir d’un fichier Excel dans lequel on retrouve une liste d’articles avec leur niveau dans la nomenclature. C’est assez simple à lire pour l’être humain. On comprend rapidement que quand une ligne a le niveau 3 et que la suivante a le niveau 4, il y a un lien de nomenclature entre les deux. Cependant au niveau d’excel, il n’y a aucune relation. Seul notre regard et notre connaissance du concept de nomenclature nous permet d’en déduire une. Voila un aperçu de ce que je peux recevoir comme nomenclature.
Au passage vers la solution PLM il nous faut donc recréer ce lien. Il faut que l’on puisse indiquer pour chaque ligne quel est l’élément parent. Je rajoute donc une colonne après le niveau pour renseigner le part Number de l’élément parent. J’applique ensuite la macro suivante à adapter à votre fichier (Constantes initiales à modifier. Attention à commencer par la ligne en dessous de votre article de tête, 3 dans l’exemple).
Sub rebuild() ' initialize constant for your excel file ' Dim StartingLine As Integer StartingLine = 3 Dim Column_Level As Integer Column_Level = 1 Dim Column_ParentRef As Integer Column_ParentRef = 2 Dim Column_PartRef As Integer Column_PartRef = 3 ' other technical variables ' Dim j As Integer Dim StoreParents(40) As String 'initialize first parent Part Number ' initParent = Cells(StartingLine, 5) ' Start rebuilding BOM ' j = StartingLine While Cells(j, Column_Level) <> "" If (CInt(Cells(j, Column_Level)) > CInt(Cells(j - 1, Column_Level))) Then ' level has increased so parentref is previous line part ref ' StoreParents(Cells(j - 1, Column_Level)) = Cells(j - 1, Column_PartRef) Cells(j, Column_ParentRef) = Cells(j - 1, Column_PartRef) ElseIf (CInt(Cells(j, Column_Level)) < CInt(Cells(j - 1, Column_Level))) Then ' level has decreased so parentref is the stored partRef of new level - 1 ' Cells(j, Column_ParentRef) = StoreParents(Cells(j, Column_Level) - 1) Else ' no level change, we keep the same ParentRef ' Cells(j, Column_ParentRef) = Cells(j - 1, Column_ParentRef) End If ' move to next line ' j = j + 1 Wend End Sub
Vous devriez donc obtenir un fichier avec les références parents indiquées. J’ai fait exprès de lister un article de niveau 3 puis de niveau 1 pour montrer que l’on peut remonter de plusieurs niveaux à la fois sans problème.
Voilà mon petit cadeau du dimanche ! C’est pas compliqué mais ça peut servir de temps en temps.
[…] Mon expérience personnelle autour des standards tourne très largement autour de la récupération de données, et l’échange de données entre systèmes logiciels différents. Je ne compte plus les nomenclatures que l’on me fournit sous format Excel pour les importer dans une solution PLM avec toujours la même phrase: « ça devrait être simple c’est un format assez standard ». (Je ne suis d’ailleurs pas étonné de voir que l’article le plus consulté sur ce blog soit « La ptite macro Excel du Dimanche pour reconstruire une nomenclature »). […]
[…] La ptite macro Excel du Dimanche pour reconstruire une nomenclature […]
[…] La ptite macro Excel du Dimanche pour reconstruire une nomenclature […]
[…] en utilisant une nomenclature sur le site d’Arena PLM et en appliquant « la petite macro Excel du dimanche » (qui reste un des articles les plus visités sur ce […]
[…] La ptite macro Excel du Dimanche pour reconstruire une nomenclature […]
[…] deuxième « macro excel du dimanche » que je publie sur le blog. La première (macro excel pour reconstituer une BOM en niveau à partir de liens parents-fils) est de loin la page la plus visitée sur le blog et je souhaite un succès identique pour cette […]
[…] La ptite macro Excel du Dimanche pour reconstruire une nomenclature […]
[…] La ptite macro Excel du Dimanche pour reconstruire une nomenclature […]